package com.workingpub.commons.domain;

/**
 * 实现本接口的所有实体在被删除的时候并不会从资源层（例如关系数据库）删除，而是将该实体的状态标识为已经删除。
 * 所有对实现该接口的实体进行查询的操作应该过滤掉已经标识为删除的那些实体。
 * 
 * @author taoping
 *
 */
public interface UnDeletable {
	/**
	 * 逻辑删除字段标识
	 */
	final String Deleted_Flag_Field = "deleted_flag";

	/**
	 * @return true 已经被删除，通过#markedAsDeleted()可以将其标识为已经删除的状态 false
	 *         没有被删除，实体初始化的时候应该表示为没有被删除状态
	 */
	public boolean deleted();

	/**
	 * 标识为删除状态
	 */
	public void markedAsDeleted();

	/**
	 * 标识为可用状态
	 */
	public void markedAsAvailable();
}
